[toc]
1、系统配置
本章主要介绍对原生操作系统的配置和优化,基本不依赖其它第三方软件。
第一节主要通过 default writes
命令来修改系统的配置,让键盘,触摸板等硬件用起来更加得心应手。以及一些常用的软件方面的优化。
第二节介绍很简单,但是大部分人不知道的快捷键使用,比如 Option 键和 Ctrl 键的用法, 帮助读者快速移动光标和编辑文字。
第三节介绍如何增强系统自带的预览程序的功能,支持更好的显示效果和更多文件格式。这样就可以在不打开文件的前提下快速浏览了。
第四节主要介绍对 Dock 栏的优化方案,还读者一个干净整洁,而且不打扰人的工作环境
1.1 系统配置优化
大小写键和 Ctrl 键交换
首先说两个我的主观看法,当然读者可以选择不接受,那样就不用浪费时间读下去了。如果你表示认可,并且希望解决这个问题,相信本文会帮到你。
- 用 Caps Lock(也就是大小写切换键)来切换大小写是非常低效的。以输入文字
aBc
为例,我们需要按下 Caps Lock 键进入大写模式,输入 B,再按一次键回到小写模式,输入 c。正确的做法是使用 shift 键,我们按住 shift 键输入 b 就会得到大写的字母,再松开就回到了小写模式。和 Caps Lock 键相比,少了一次按键。 - 键盘上的 Ctrl 键位置很差,如果你是用标准的打字手势,你会发现这个键刚好在左手的手心,无论哪个手指都不方便去按它。而 Caps Lock 键则占据了左手小拇指左侧的黄金位置。更重要的是,Ctrl 键的用途非常广,无论是作为 Vim 或者 Emacs 的功能键,还是各种快捷键的修饰键,都是一个非常常用的按键,比如在下一章中就会介绍 Ctrl 键的妙用。
简单总结一下就是:
- Caps Lock 键效率低,自身毫无用处
- Caps Lock 键占据了黄金的位置
- Ctrl 键用处多,使用频率高
- Ctrl 键位置差,很不方便按
当这四个理由合在一起时,你很难否认,最好的做法就是:交换 Caps Lock 键和 Ctrl 键。实际上系统的键盘设置里面已经支持了这个操作,但本文会从命令行的角度来聊聊,这样可以方便我们快速搭建 Mac 的工作环境。
踩了无数坑以后,终于发现了一个可用的脚本,原理啥的就不说了,因为基本上没有别的用途:
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000039,"HIDKeyboardModifierMappingDst":0x7000000E0},{"HIDKeyboardModifierMappingSrc":0x7000000E0,"HIDKeyboardModifierMappingDst":0x700000039}]}'
不过这个脚本有一个大坑,就是虽然立刻就会生效,但是重启后就失效了,所以我们需要在每次启动时都执行一次这个命令。
添加开机任务
很多程序的设置中都可以选择是否开机自动启动,其实除了启动 App,我们可以编写自己的 shell 脚本,并将它设置为启动时自动执行,这样就获得了更大的灵活性,可以完成任何自己想做的操作。
首先我们需要一个配置文件,先给它随便去个名字,比如叫做 com.bestswifter.onlogin.plist。
内容如下所示,虽然很多,但绝大多数地方都是模板,我们只需要修改其中一处即可:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LaunchOnlyOnce</key>
<true/>
<key>Label</key>
<string>com.bestswifter.onlogin</string>
<key>ProgramArguments</key>
<array>
<string>zsh</string>
<string>-c</string>
<string>"$HOME/.macbootstrap/onlogin.sh"</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
注意这里的几个键,LaunchOnlyOnce
表示脚本只会执行一次,否则可能会每隔 10s 就执行一次。Label
是自定义的名字,理论上来说随便写,不过我建议和文件名保持一致即可,一定不会出错。
array
标签里面就是自己要执行的命令了,前两行zsh -c
不要动,表示用 zsh 来执行脚本,然后后面写脚本的路径。比如在这个例子里面我就把入口收敛到了自己的onlogin.sh
里面,然后再执行任何事情就很方便了。
对于普通用户来说,上述 plist 文件唯一需要修改的就是执行脚本的位置了。修改后后把这个文件拷贝到 ~/Library/LaunchAgents
目录下,表示仅对当前用户生效,然后执行:
sudo launchctl load ~/Library/LaunchAgents/com.bestswifter.onlogin.plist
将这个文件注册到系统中。
触摸板优化
首先可以开启轻按点击功能,这样只要轻轻的触碰触摸板,不用真的按下去,就可以点击了,这样真的很轻松:
defaults write com.apple.AppleMultitouchTrackpad Clicking -int 1
defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
除此以外我们还可以开启三指拖拽功能,这样想移动窗口位置时,只要用三个手指即可拖拽,而不用先点击选中窗口,再拖拽:
defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true
用好 F1-F12
默认情况下,键盘最上面一排的 F1- F12 都有各自的作用,从图标上就能看出。比如 F1 和 F2 用来调节屏幕亮度,F5 和 F6 调节键盘灯亮度灯。此时他们可以被理解为特殊按键,更偏向与娱乐,而不是普通的 F1 - F12。
对于工作重心在编程的码农来说,这些特殊按键有些浪费,而很多 IDE 提供的快捷键都需要 F1 - F12,尤其在断点调试时格外有用,以 Xcode 为例说明下:
- F6:执行下一行代码
- F7:跳到代码内部执行,比如当前停在一个函数上,F6 会直接执行这个函数,F7 会跳到函数内部的第一行去执行
- F8:跳出当前代码块,和 F7 的作用恰好相反
这里的 F6 是标准按键,需要我们同时按下键盘左下角的 fn 键和顶部的 F6 键才能触发,效率极其低下。然而,作为程序员,我们并不太需要那些花哨的娱乐功能,因此我建议在设置中把 F1 - F12 改为标准按键,如下图所示:
或者更高效的做法是使用命令行:
defaults write -globalDomain com.apple.keyboard.fnState -int 1
关闭第三方程序验证
有时候,或许是囊中羞涩,或许是国外厂商定价不合理,我们或多或少会下载某些破解版的应用,此时直接打开很可能被系统拒绝,或者报错:**无法打开已损坏的安装包。**我们可以通过命令行关闭这一保(限)护(制):
sudo spctl --master-disable
defaults write com.apple.LaunchServices LSQuarantine -bool false
关闭镜像验证
在打开 .dmg
格式的安装文件时,默认会先验证镜像,如果文件本身很大,验证的时间会很长,可以输入以下命令关闭验证:
defaults write com.apple.frameworks.diskimages skip-verify -bool true
defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true
defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true
完全键盘控制
很多操作都会弹出系统的对话框,要求我们确认或者取消
如果没有开启完全键盘控制,我们只能按回车键确认,或者移动鼠标选择取消。如果开启了完全键盘控制,只要按下空格键,就相当于选中蓝色边框的按钮,也就是这里的取消键。按下 Tab 键可以在多个按钮之间切换。
完全键盘控制可以在系统的设置界面开启,也可以直接通过命令行开启:
defaults write NSGlobalDomain AppleKeyboardUIMode -int 3
1.2 系统快捷键进阶
除了 Command + C/V 这种入门必备的快捷键,还有一些系统级的常用快捷键是有必要掌握一下的。
光标移动
这里比较推荐使用 Emacs 系的快捷键而不是传统的 Command + ←/→/Delete
之类的。因为后者并不通用,比如在终端中就无法使用,而 Emacs 系的快捷键则在几乎所有系统级别的输入框内都通用。
常见的几个行级别操作有:
- Ctrl + A:移动到行首
- Ctrl + E:移动到行尾
- Ctrl + K:删除到行尾
- Ctrl + U:删除到行头
- Ctrl + N:移动到下一行
- Ctrl + P:移动到上一行
前三个命令在终端中非常常用,能大幅度提高工作效率。后两个命令则在 Vim 系列中很常见,多用于上下切换列表中的选项。
几个比较常见的字母级别操作有:
- Ctrl + F:向右(Forward)移动一个字母,等价于方向键 →
- Ctrl + B:向左(Backward)移动一个字母,等价于方向键 ←
- Ctrl + D:向右删除一个字母,等价于
→ + Delete
这个快捷键也很常用 - Ctrl + H:向左删除一个字母,等价于
Delete
使用 Option 键
如果觉得按字母操作太过于细粒度,按行操作又太粗粒度,那么 Option 键绝对算得上神器,因为它可以按单词操作。
- Option + ←:光标向左移动一个单词
- Option + →:光标向右移动一个单词
- Option + Delete:删除一个单词
使用 Shift 键
Shift 键类似于可视模式,比如在某个位置点击光标并按住 shift 键不松开,再去另一个位置点击一次,就可以选中两次点击位置之间的文本内容。
注意,shift 键可视模式还可以和 Option 键一起合用,感兴趣的读者可以自行尝试。
1.3 拓展预览程序
对于一些文本文件,按下空格键就可以调用系统的预览程序,快速浏览文件内容。但如果想获得更好的阅读体验,或支持更多类型文件的快速浏览,就需要通过插件来完成。
可以输入以下命令来安装拓展,下面会逐个介绍:
brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlimagesize webpquicklook qlvideo provisionql quicklookapk
qlcolorcode
顾名思义,这是一个代码高亮的插件,效果如图所示:
qlstephen
这个插件能让我们预览没有后缀的文本文件,效果如图所示:
qlmarkdown
这个插件能让我们预览 markdown 文件的渲染效果:
quicklook-json
这个插件也很容易理解,提供对 JSON 文件的格式化和高亮支持:
betterzip
这个插件我没有安装,因为它需要付费,它可以预览压缩文件内部的内容,还支持自定义各种解压缩时的行为(比如解压缩后自动删除压缩包)。下图是安装前的压缩文件预览图:
qlimagesize
这个拓展可以展示图片的分辨率和大小:
webpquicklook
这个拓展可以让我们预览 WebP 格式的图片:
qlvideo
预览更多格式的视频文件:
provisionql
这个插件可以预览 .app
或者 .ipa
后缀的程序:
quicklookapk
预览安卓的 .apk
文件:
以上就是和程序员相关的常用插件,还有一些设计师可能用到的插件,可以访问这个网址自行查看。
1.4 Dock 栏优化
我们知道 Dock 默认位于屏幕底部,而且屏幕本身是 16 : 9 的,这就导致屏幕的可视部分更加扁平。所以我的习惯是把它放在屏幕左侧(右侧也是同理),这样会使屏幕的宽高比更加自然一些。
长期展示 Dock 对并不大的屏幕空间来说是一种浪费,我们可以把它设置为自动隐藏,当鼠标滑过去以后再显示:
defaults write com.apple.dock autohide -bool true
在后面的章节中我会介绍如何快速唤起应用,所以大多数时候 Dock 栏其实是没用的,大可不必担心看不到 Dock 栏。
定制你的 Dock
同时,系统默认会添加很多程序在 Dock 中,很多程序基本上用不到(比如地图、通讯录等等),我的做法是先把它们都移除出去,对于常用的程序,再保留在 Dock 中。
为了完成上述目的,命令行看起来就不太够了,我们可以直接用 OC 来编辑对应的 plist 文件来达到目的,代码比较冗长,感兴趣的读者可以去 我的 MacBootstrap 上查看。
然后用 clang 编译源码并执行:
clang -framework Foundation path-to-file.m -o DockIconHider
./DockIconHider